package framework.catalog;

import org.openqa.selenium.By;

import framework.BaseForm;
import framework.elements.Button;
import framework.elements.Label;
import framework.elements.TextBox;

/** Базовая форма для каталогов.
 */
public class BaseCatalog extends BaseForm{

	/** Базовый конструктор.
	 * @param titleLocator ожидаемый локатор
	 * @param title название формы
	 */
	protected BaseCatalog(final By titleLocator, final String title) {
		super(titleLocator, title);
	}

	private TextBox searchTxb = new TextBox(By.id("goodssearch"), "Строка поиска");
	private Button poiskBtn = new Button(By.xpath("//input[@value='Поиск']"), "Поиск");
	private Label naidenoVsego1 = new Label(By.xpath("//div[@class='paging']/span"), "Всего найдено 1");
	private Button naytiBtn = new Button(By.xpath("//input[@value='Найти']"), "Найти");
	private Button choiseBtn = new Button(By.xpath("//input[@value='Выбрать']"), "Выбрать");

	/** Возвращает текстбокс поиска
	 * @return текстбокс поиска
	 */
	protected TextBox searchTxb(){
		return searchTxb;
	}

	/** Возвращает кнопку поиска
	 * @return кнопка поиска
	 */
	protected Button poiskBtn(){
		return poiskBtn;
	}

	/** Возвращает поле с текстом "Найдено всего 1"
	 * @return поле с текстом "Найдено всего 1"
	 */
	protected Label naidenoVsego1(){
		return naidenoVsego1;
	}

	/**  Возвращает кнопку "Найти"
	 * @return кнопка "Найти"
	 */
	protected Button naytiBtn(){
		return naytiBtn;
	}

	/** Нажимает кнопку "Выбрать" и ждет закрытия окна справочника
	 */
	protected void clickChoiseAndWaitCloseWnd(){
		choiseBtn.clickAndRepeatIfWndNotClosed(2);
	}

	/** Нажимает на кнопку "Найти" и ждет появления надписи "Всего найдено 1"
	 */
	protected void clickNayti(){
		naytiBtn.clickAndWait();
		naidenoVsego1.waitAndAssertIsPresent();
	}

	@Override
	public void assertIsOpen() {
		Label elem = new Label(titleLocator, title);
		try {
			elem.waitAndAssertIsPresent();
			info(String.format("Справочник '%1$s' появился", this.title));
		} catch (Throwable e) {
			fatal(String.format("Справочник '%1$s' не появился", this.title));
		}
	}
}
